package com.hxd.otc.common;

import android.text.TextUtils;

import com.google.gson.reflect.TypeToken;
import com.hxd.otc.utils.SpUtil;
import com.hxd.otc.utils.StringUtil;

import java.io.Serializable;

/**
 * Created by lzy on 2019/1/8 0008.
 * description ${当前登录账号信息帮助类}
 */
public class RecentLoginAccountInfoHelper {
    private RecentLoginAccountInfoHelper() {
    }

    /**
     * @return 当前登录账号
     */
    public static String getAccount() {
        return StringUtil.emptyIfNull(getRecentLoginAccountInfo().getAccount());
    }

    /**
     * @return 当前登录密码
     */
    public static String getPassword() {
        return getRecentLoginAccountInfo().getPassword();
    }

    /**
     * @return 当前指纹开启状态
     */
    public static boolean isFingerprintStatus() {
        return getRecentLoginAccountInfo().isFingerprintStatus();
    }

    /**
     * 作为v1.1.7-->v1.1.8升级跨越时，已登录用户对于指纹开关兼容的配置检测，用以屏蔽指纹功能，因为此时没有缓存的登录密码
     */
    public static boolean isSupport() {
        return !TextUtils.isEmpty(getAccount());
    }

    /**
     * @param account       当前登录账号
     * @param encryptedLoginPassword 当前已加密后的登录密码
     */
    public static void updateAccountAndPassword(String account, String encryptedLoginPassword) {
        RecentLoginAccountBean recentLoginAccountInfo = getRecentLoginAccountInfo();
        //当使用新账号登录，需要更新账号信息
        String oldAccount = StringUtil.emptyIfNull(recentLoginAccountInfo.getAccount());
        if (!oldAccount.equals(account)) {//当切换账号得重置最近登录账号信息
            recentLoginAccountInfo = new RecentLoginAccountBean();
        }
        recentLoginAccountInfo.setAccount(account);
        recentLoginAccountInfo.setPassword(encryptedLoginPassword);
        updateAccountToLocal(recentLoginAccountInfo);
    }

    /**
     * @param fingerprintStatus 指纹开启状态
     */
    public static void updateFingerprintStatus(boolean fingerprintStatus) {
        RecentLoginAccountBean recentLoginAccountInfo = getRecentLoginAccountInfo();
        recentLoginAccountInfo.setFingerprintStatus(fingerprintStatus);
        updateAccountToLocal(recentLoginAccountInfo);
    }

    /**
     * 更新新的账号信息到本地
     *
     * @param recentLoginAccountInfo
     */
    private static void updateAccountToLocal(RecentLoginAccountBean recentLoginAccountInfo) {
        SpUtil.PERMANENT.putObject(SpConfig.Permanent.RECENT_LOGIN_ACCOUNT_CACHE_INFO, recentLoginAccountInfo);
    }

    /**
     * 获取当前登录账号的信息
     *
     * @return
     */
    public static RecentLoginAccountBean getRecentLoginAccountInfo() {
        RecentLoginAccountBean recentLoginAccountBean = SpUtil.PERMANENT.getObject(SpConfig.Permanent.RECENT_LOGIN_ACCOUNT_CACHE_INFO, new TypeToken<RecentLoginAccountBean>() {
        }.getType());
        return recentLoginAccountBean == null ? new RecentLoginAccountBean() : recentLoginAccountBean;
    }

    /**
     * 主动退出，清空指纹等信息
     */
    public static void logout() {
        RecentLoginAccountBean recentLoginAccountInfo = getRecentLoginAccountInfo();
        recentLoginAccountInfo.setPassword("");
        recentLoginAccountInfo.setFingerprintStatus(false);
        updateAccountToLocal(recentLoginAccountInfo);
    }

    static class RecentLoginAccountBean implements Serializable {
        private String account;
        private String password;
        private boolean fingerprintStatus;

        public String getAccount() {
            return account;
        }

        public void setAccount(String account) {
            this.account = account;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        public boolean isFingerprintStatus() {
            return fingerprintStatus;
        }

        public void setFingerprintStatus(boolean fingerprintStatus) {
            this.fingerprintStatus = fingerprintStatus;
        }

        @Override
        public String toString() {
            return "RecentLoginAccountBean{" +
                    "account='" + account + '\'' +
                    ", password='" + password + '\'' +
                    ", fingerprintStatus=" + fingerprintStatus +
                    '}';
        }
    }
}
